#include <cstdio>

int max( int a, int b ) { return ( a > b ) ?a :b; }

int v1, v2, n, f[ 501 ][ 51 ][ 2 ], p[ 501 ], h[ 501 ], s[ 501 ];

int update( int a, int b )
{
    if ( a == -1 )
        return b;
    if ( b == -1 )
        return a;
    return max( a, b );
}

void init( )
{
    int i, j;
    for ( i = 0; i < n; i++ )
        scanf("%d%d%d", &p[ i ], &h[ i ], &s[ i ]);
    for ( i = 0; i <= v1; i++ )
        for ( j = 0; j <= v2; j++ )
            f[ i ][ j ][ 0 ] = f[ i ][ j ][ 1 ] = -1;
    f[ 0 ][ 0 ][ 0 ] = 0;
}

void work( )
{
    int i, j, k, sumh = 0, ans = -1    ;
    for ( i = 0; i < n; i++ )
    {
        if ( !s[ i ] )
            continue;
        sumh += h[ i ];
        for ( j = v1; j >= 0; j-- )
            for ( k = v2; k >= 0; k-- )
            {
                if ( f[ j ][ k ][ 0 ] != -1 )
                    f[ j ][ k ][ 1 ] = update( f[ j ][ k ][ 0 ] + h[ i ], f[ j ][ k ][ 1 ] );
                if ( j >= p[ i ] )
                {
                    if ( f[ j - p[ i ] ][ k ][ 0 ] != -1 )
                        f[ j ][ k ][ 0 ] = update( f[ j - p[ i ] ][ k ][ 0 ] + h[ i ], f[ j ][ k ][ 0 ] );
                    if ( f[ j - p[ i ] ][ k ][ 1 ] != -1 )
                        f[ j ][ k ][ 1 ] = update( f[ j - p[ i ] ][ k ][ 1 ] + h[ i ], f[ j ][ k ][ 1 ] );
                }
                if ( k >= p[ i ] )
                {
                    if ( f[ j ][ k - p[ i ] ][ 0 ] != -1 )
                        f[ j ][ k ][ 0 ] = update( f[ j ][ k - p[ i ] ][ 0 ] + h[ i ], f[ j ][ k ][ 0 ] );
                    if ( f[ j ][ k - p[ i ] ][ 0 ] != -1 )
                        f[ j ][ k ][ 1 ] = update( f[ j ][ k - p[ i ] ][ 1 ] + h[ i ], f[ j ][ k ][ 1 ] );
                }
            }
    }
    for ( i = 0; i <= v1; i++ )
        for ( j = 0; j <= v2; j++ )
            for ( k = 0; k < 2; k++ )
                if ( f[ i ][ j ][ k ] != sumh )
                    f[ i ][ j ][ k ] = -1;
    for ( i = 0; i < n; i++ )
    {
        if ( s[ i ] )
            continue;
        for ( j = v1; j >= 0; j-- )
            for ( k = v2; k >= 0; k-- )
            {
                if ( f[ j ][ k ][ 0 ] != -1 )
                    f[ j ][ k ][ 1 ] = update( f[ j ][ k ][ 0 ] + h[ i ], f[ j ][ k ][ 1 ] );
                if ( j >= p[ i ] )
                {
                    if ( f[ j - p[ i ] ][ k ][ 0 ] != -1 )
                        f[ j ][ k ][ 0 ] = update( f[ j - p[ i ] ][ k ][ 0 ] + h[ i ], f[ j ][ k ][ 0 ] );
                    if ( f[ j - p[ i ] ][ k ][ 1 ] != -1 )
                        f[ j ][ k ][ 1 ] = update( f[ j - p[ i ] ][ k ][ 1 ] + h[ i ], f[ j ][ k ][ 1 ] );
                }
                if ( k >= p[ i ] )
                {
                    if ( f[ j ][ k - p[ i ] ][ 0 ] != -1 )
                        f[ j ][ k ][ 0 ] = update( f[ j ][ k - p[ i ] ][ 0 ] + h[ i ], f[ j ][ k ][ 0 ] );
                    if ( f[ j ][ k - p[ i ] ][ 1 ] != -1 )
                        f[ j ][ k ][ 1 ] = update( f[ j ][ k - p[ i ] ][ 1 ] + h[ i ], f[ j ][ k ][ 1 ] );
                }
            }
    }
    for ( i = 0; i <= v1; i++ )
        for ( j = 0; j <= v2; j++ )
            for ( k = 0; k < 2; k++ )
                if ( ans < f[ i ][ j ][ k ] )
                    ans = f[ i ][ j ][ k ];
    printf("%d\n", ans);    
}

int main( )
{
    int cas = 1;
    while ( scanf("%d%d%d", &v1, &v2, &n) )
    {
        if ( v1 == 0 && v2 == 0 && n == 0 )
            break;
        printf("Case %d: ", cas++);
        init( );
        work( );
        puts("");
    }
    return 0;
}
